// JavaScript Document
function Direccion() {
	this.ID;
	this.pais = {id:'',name:'', HTMLID:'Direccion_direccion_pais_id'};
	this.provincia = {id:'',name:'', HTMLID:'Direccion_direccion_provincia_id'};
	this.localidad = {id:'',name:'', HTMLID:'Direccion_direccion_localidad_id'};
	this.barrio = {id:'',name:'', HTMLID:'Direccion_direccion_barrio'};
	this.calle = {id:'',name:'', HTMLID:'Direccion_direccion_calle'};
	this.altura = {id:'',name:'', HTMLID:'Direccion_direccion_altura'};
	this.torre = {id:'',name:'', HTMLID:'Direccion_direccion_torre'};
	this.piso = {id:'',name:'', HTMLID:'Direccion_direccion_piso'};
	this.departamento = {id:'',name:'', HTMLID:'Direccion_direccion_departamento'};
	this.codigoPostal = {id:'',name:'', HTMLID:'Direccion_direccion_codigopostal'};
	

	this.provinciaOculta='';
	this.localidadOculta='';
	
	//google variables
	this.mapHTML="map_canvas";
	this.map = null;
	this.geocoder = null;
	this.place=false;
	this.manual={value:false, htmlName:'Direccion[Direccion_ismanualmarker]'};//el checkbox que define si es manual o no
	this.zoom={value:16, HTMLID:'Direccion_Direccion_zoom'};
	this.zoomLabel={value:'', HTMLID:'Direccion_Direccion_zoom_label'};
	this.typeMAP={value:false, htmlName:'Direccion[Direccion_typemap]'};
	this.lat;
	this.lng;
	this.marker=false; // marca maps
	this.searchStatus ={id:'',name:'', HTMLID:'searchStatus'};
	this.helpSearchManual ={id:'',name:'', HTMLID:'helpSearchManual'};
	
	
}

Direccion.prototype.beforeSendState = function(idCountryObject, idStateObject, idDepartamentObject,
		idCityObject, loadingMessage)
{
	if ($('#' + idStateObject).length) // object state no found
	{
		if ($('#' + idCountryObject).length) {
			// $('#' + idCountryObject).attr('disabled', 'disabled');
		}

		$('#' + idStateObject).attr('disabled', 'disabled');// clear list data
		$('#' + idStateObject + ' > option').remove();// clear list data
		$('#' + idStateObject)
				.append('<option>' + loadingMessage + '</option>');

		if ($('#' + idDepartamentObject).length) {
			$('#' + idDepartamentObject).attr('disabled', 'disabled');
			$('#' + idDepartamentObject + ' > option').remove();// clear list
			// data
		}

		if ($('#' + idCityObject).length) {
			$('#' + idCityObject).attr('disabled', 'disabled');
			$('#' + idCityObject + ' > option').remove();// clear list data
		}

	}
}

Direccion.prototype.successSendState = function (result, idCountryObject, idStateObject,
		idDepartamentObject, idCityObject, selectMessage) {
	
	if ($('#' + idStateObject).length) // object state no found
	{

		if ($('#' + idCountryObject).length != 0) {
			// $('#' + idCountryObject).removeAttr('disabled');
		}

		$('#' + idStateObject + ' > option').remove();// clear list data

		result = '<option value="">' + selectMessage + '</option>' +  result;
		
		//$('#' + idStateObject).append('<option value="">' + selectMessage + '</option>');
		$('#' + idStateObject).removeAttr('disabled');
		$('#' + idStateObject).html(result);

		
		console.log($('#' + idDepartamentObject).length);
		if ($('#' + idDepartamentObject).length) {
			$('#' + idDepartamentObject).removeAttr('disabled');
		}

		if ($('#' + idCityObject).length) {
			$('#' + idCityObject).removeAttr('disabled');
		}
		
		var dire = this;
		if (dire.provinciaOculta != '') 
		{
			$('#' + dire.provincia.HTMLID).val(dire.provinciaOculta);
			$('#' + dire.provincia.HTMLID).trigger('change');
		}

	}
}

Direccion.prototype.beforeSendCity = function (idCountryObject, idStateObject, idDepartamentObject,
		idCityObject, loadingMessage) {
	
	if ($('#' + idCityObject).length) // object city found
	{
		if ($('#' + idCountryObject).length) {
			$('#' + idCountryObject).attr('disabled', 'disabled');
		}

		if ($('#' + idStateObject).length) {
			// $('#' + idStateObject).attr('disabled', 'disabled');
		}

		if ($('#' + idDepartamentObject).length) {
			$('#' + idDepartamentObject).attr('disabled', 'disabled');
		}
		
		$('#' + idCityObject).attr('disabled', 'disabled');// clear list data
		$('#' + idCityObject + ' > option').remove();// clear list data
		$('#' + idCityObject).append('<option>' + loadingMessage + '</option>');
		if($('#' + idStateObject +' option:selected').val() =='')
		{
			$('#' + idStateObject +' option:selected').val(0);
		}
	}

}

Direccion.prototype.successSendCity = function (result, idCountryObject, idStateObject,
		idDepartamentObject, idCityObject, selectMessage) {
	if ($('#' + idCityObject).length) // object state no found
	{

		if ($('#' + idCountryObject).length != 0) {
			$('#' + idCountryObject).removeAttr('disabled');
		}
		
		//$('#' + idStateObject).removeAttr('disabled');

		if ($('#' + idDepartamentObject).length) {
			$('#' + idDepartamentObject).removeAttr('disabled');
		}
		
		$('#' + idCityObject + ' > option').remove();// clear list data
		$('#' + idCityObject).append('<option value="">' + selectMessage + '</option>');
		$('#' + idCityObject).append(result);
		$('#' + idCityObject).removeAttr('disabled');
		
		var dire = this;
		if (dire.localidadOculta != '') // object tbodyPerson found
		{
			$('#' + dire.localidad.HTMLID).val(dire.localidadOculta);
		}

	}
}

Direccion.prototype.init = function()
{
	
}

Direccion.prototype.showGoogleMap = function()
{
	var add = this;
	
	var myLatlng = new google.maps.LatLng(50.82551148757445, -0.5845928192138672);
    var myOptions = {
    	zoom: add.getZoom(),
      	center: myLatlng,
      	mapTypeControl:false,
      	//scrollwheel:false,
      	mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    if(add.map == null)
    {
    	add.map = new google.maps.Map(document.getElementById(add.mapHTML), myOptions);
    }
    
    // zoom 
    google.maps.event.addListener(add.map, 'zoom_changed', function(){add.setZoom(add.map.getZoom());});
    $("#"+add.zoomLabel.htmlID).text(add.getZoom());
}

Direccion.prototype.setZoom= function(zoom)
{
	var add = this;
	var x = parseInt(zoom);
	$("#"+add.zoom.htmlID).val(x);
	$("#"+add.zoomLabel.htmlID).text(x);
}

Direccion.prototype.getZoom= function()
{
	var add = this;
	var zoom = $("#"+add.zoom.htmlID).val();
	
	if(zoom == '')
	{
		zoom = add.zoom.value;
	}
	return parseInt(zoom);
}

Direccion.prototype.setGoogleMapZoom= function(zoom)
{
	console.log(this.map.getZoom());
	
	zoom = parseInt(zoom);
	var add = this;
	//add.map.setZoom(zoom);
	add.setZoom(zoom);
}

Direccion.prototype.getGoogleMapZoom= function()
{
	return this.map.getZoom();
}

Direccion.prototype.setGoogleMapType= function(typeMap)
{
	this.map.setMapTypeId(typeMap);
}

Direccion.prototype.getGoogleMapType= function()
{
	return this.map.getMapTypeId();
}

Direccion.prototype.setGoogleMarker = function(marker)
{
}

Direccion.prototype.getGoogleMarker = function()
{
}

Direccion.prototype.setGoogleMarkerManual = function(isManual)
{
	if(isManual == 1)
	{
		var add = this;
		$("#"+add.searchStatus.htmlid).html(Direccion_labels_language.Search_Manual);
		$("#"+add.helpSearchManual.htmlid).html("<div class='searchManual'><div class='iconSearchManual'></div>"+Direccion_labels_language.Help_Search_Manual+ "</div>" );
	    
		var latlng=new google.maps.LatLng($("#"+add.latitude.htmlid).val(),$("#"+add.longitude.htmlid).val());
	    
	    if(!add.marker)
	    {
	    	add.marker = new google.maps.Marker({map:add.map, position: latlng});
	    }
	    
	    google.maps.event.addListener(add.marker, 
	    								'dragend', 
	    								function()
	    								{
	        								var l=add.marker.getPosition();
									        $("#"+add.latitude.htmlid).val(l.lat());
									        $("#"+add.longitude.htmlid).val(l.lng());
									        add.map.panTo(l);
	        
	    								}
	    							);
	    add.map.setCenter(latlng);
	    
	    this.marker.setDraggable(true);
	    //$(".arrastrar").show();
	}
	else
	{
		this.searchGoogleDireccion();
	}
	
}

Direccion.prototype.getGoogleDireccion = function()
{
	var add = this;
	return $("#"+ add.Direccion1.htmlid).val() +' ' + $("#"+ add.height.htmlid).val() + ', ' + $("#"+ add.state.htmlid + ' :selected').text() + ', ' + $("#"+ add.country.htmlid + ' :selected').text();
}

Direccion.prototype.setGoogleDireccion = function()
{
}

Direccion.prototype.setHandlerEvents = function()
{
	var add = this;
	$("input[name='"+add.typeMAP.htmlName+"']").click(function(){add.setGoogleMapType($(this).val())}); 
	
	$("input[name='"+add.manual.htmlName+"']").click(function(){add.setGoogleMarkerManual($(this).val())}); 
	
	
	$('#' + add.country.htmlid).live('change keyup',function(){add.searchGoogleDireccion()});
	$('#' + add.state.htmlid).live('change keyup',function(){add.searchGoogleDireccion()});
	
	$('#' + add.calle.htmlid).bind("change keyup",function(){add.searchGoogleDireccion()});
	$('#' + add.height.htmlid).live('change keyup',function(){add.searchGoogleDireccion()});
	
}

Direccion.prototype.searchGoogleDireccion = function()
{
	var add = this;
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode(
    					{'Direccion': this.getGoogleDireccion(),language:"ES"}, 
    					function(results, status)
    					{
    						if (status == google.maps.GeocoderStatus.OK) 
    						{
    							$('#' + add.latitude.htmlid).val(results[0].geometry.location.lat());
    							$('#' + add.longitude.htmlid).val(results[0].geometry.location.lng());
    							add.lat = results[0].geometry.location.lat();
    							add.lng = results[0].geometry.location.lng();
    							
    							add.map.setCenter(results[0].geometry.location);
    							if(add.marker) 
    							{
    								add.marker.setMap(null);
    							}
    							add.marker = new google.maps.Marker({map:add.map, position: results[0].geometry.location});
    							var aprox=results[0].geometry.location_type; 
    							
    							switch(aprox)
								{
									case "APPROXIMATE":
										$('#' + add.searchStatus.htmlid).html(Direccion_labels_language.Direccion_No_Located);
										break;
									case "GEOMETRIC_CENTER":
										$('#' + add.searchStatus.htmlid).html(Direccion_labels_language.Direccion_No_Located);
										break;
									case "RANGE_INTERPOLATED":
										$('#' + add.searchStatus.htmlid).html(Direccion_labels_language.Direccion_Located);
										break;
									case "ROOFTOP":
										$('#' + add.searchStatus.htmlid).html(Direccion_labels_language.Direccion_Located);
										break;
								}
    						} 
    						else
    							$('#' + add.searchStatus.htmlid).html(Direccion_labels_language.Direccion_No_Located);
    						}); 
}

Direccion.prototype.setearDireccion = function(data)
{
	if(!data.hasOwnProperty('error'))//no existe la persona
	{
		if(data[0].hasOwnProperty('relations') && data[0].relations.hasOwnProperty('direcciones') && data[0].relations.direcciones.length > 0)
		{
			tmpDireccion = data[0].relations.direcciones[0];
			var dire = this; 
			
			if ($('#' + dire.pais.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.pais.HTMLID).val(tmpDireccion.direccion_pais_id);
			}
			if ($('#' + dire.provincia.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.provincia.HTMLID).val(tmpDireccion.direccion_pais_id);
				dire.provinciaOculta = tmpDireccion.direccion_provincia_id;
			}
			
			if ($('#' + dire.localidad.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.localidad.HTMLID).val(tmpDireccion.direccion_localidad_id);
				dire.localidadOculta = tmpDireccion.direccion_localidad_id;
			}
			
			if ($('#' + dire.barrio.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.barrio.HTMLID).val(tmpDireccion.direccion_barrio);
			}
			
			if ($('#' + dire.calle.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.calle.HTMLID).val(tmpDireccion.direccion_calle);
			}
			
			if ($('#' + dire.altura.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.altura.HTMLID).val(tmpDireccion.direccion_altura);
			}
			
			if ($('#' + dire.torre.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.torre.HTMLID).val(tmpDireccion.direccion_torre);
			}
			
			if ($('#' + dire.piso.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.piso.HTMLID).val(tmpDireccion.direccion_piso);
			}
			
			if ($('#' + dire.departamento.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.departamento.HTMLID).val(tmpDireccion.direccion_departamento);
			}
			
			if ($('#' + dire.codigoPostal.HTMLID).length > 0) // object tbodyPerson found
			{
				$('#' + dire.codigoPostal.HTMLID).val(tmpDireccion.direccion_codigopostal);
			}
			
			//hago los ajax
			$('#' + dire.pais.HTMLID).trigger('change');
		}
	}
}

Direccion.prototype.limpiarFormularioDireccion = function(){
	var dire = this; 
	if ($('#' + dire.pais.HTMLID).length){$('#' + dire.pais.HTMLID).val(0);}
	
	if ($('#' + dire.provincia.HTMLID).length){$('#' + dire.provincia.HTMLID).val(0);}
	
	if ($('#' + dire.localidad.HTMLID).length){$('#' + dire.localidad.HTMLID).val(0);}
	
	if ($('#' + dire.calle.HTMLID).length){$('#' + dire.calle.HTMLID).val('');}
	
	if ($('#' + dire.calle.HTMLID).length){$('#' + dire.calle.HTMLID).val('');}
	
}
